package Day23;

import org.omg.CORBA.TIMEOUT;

public class Day23 {
    //M
    //1 异常传播
    //沿着调用栈向上传播 直到遇到匹配的catch块来处理异常 到达顶层的调用者

    //2 什么是异常链
    //将一个异常与另一个异常相关联 将当前的异常作为参数传递给新创建的异常 通常用于提供异常的原因或上下方的信息
    //在java中可以嵌套一个异常在另一个异常中 形成异常链
    //好处 有助于调试和理解代码中异常的流程

    //线程
    //1 什么是线程
    //2 继承Thread类重写run()方法 实现Runnable接口里的run()方法
    //3 如何启动线程
    //在java中可以通过调用thread类的start()方法启动一个线程
    //4 线程的生命周期
    //五个阶段 新创建 就绪 运行 阻塞 销毁

/*----------------------------------------------------------------------------------------*/
    //数据库
    //手工管理 -> 文件管理 -> 数据库
    //文件储存方式保护数据的弊端
    //1 缺乏对数据的整体管理 数据不便修改(数据类型各异 难以统一管理)
    //2 不利于数据分析和共享
    //3 数据量急剧增长 大量数据不可能长期保存在文件中(直接量 内存开销极大)

    //关系型数据库 (经过长期发展 现在使用此数据库较多)

    //DB(数据库 创建个文件夹 用于保存数据 文件夹就相当于数据库)和DBMS(数据库管理系统 管理数据库的软件)
    //DBMS 通过特殊语句(SQL语句)完成文件的增删改查

    //关系 :描述两个元素间的关联或对应关系
    //使用关系模型把数据组织到二维数据表(Table)中

    //产品化:
    //收费(商用收费 学习免费):
    //Oracle 不仅是数据库 还是java的后爹(将创建java的公司收购了)
    //DB2
    //Sybase
    //SQL Server
    //免费:
    //MySQL
    //MariaDB(与MySQL同母异父)

    //库与表的概念
    //表是数据的集合 一组具有相同属性的数据保存在一张表上
    //库是表的集合 不同项目都可以创建一个库 用来保存该项目中所有的表

    //创建库相关操作

    //创建表 一般来说 表中的第一个字段为id+类型 一般为INT(默认长度为11) 字符串类型为UUID
    //VARCHAR字符串 (32) 长度 表示字符串长度
    //表中只有最后一个属性不需要加","其他的都需要用","隔开

    //查询表结构 DESC 表名

    //CQL语句中并不是必须加";" 但是建议加";"用来隔开每个字段 否则会将分号前所有语句一起执行

    //修改表结构
//    ALTER TABLE 表名 ADD 新加属性 类型(长度)[约束]

    //注意
    //表的修改尽量在表中没有数据的情况下进行
    //若表中已经存在数据
        //1 尽量不修改字段类型 否则可能导致类型不符而修改失败
        //2 字段长度尽量不缩减 否则可能会造成数据丢失
        //3 字段约束不能违背原有的约束条件

    //DML语言 数据操作语言(涉及到数据的操作)
    //改变数据表中的数据
    //增(插)删改
    //增 INSERT INTO 表名 (想要添加的数据名) VALUE(S) (对应的数据值)

    //INSERT语句可以忽略某些字段 被忽略的字段会插入默认值
    //注意 无论数据库中何种类型的字段 默认值都是null

    //给字段设置默认值 属于DDL语句 使用DEFAULT关键字设置默认值

    //全列插入 INSERT语句允许不指定任何字段 此时为全列插入
        //要求VALUES子句中指定的值的顺序 个数 类型必须与表结构完全一致
    //批量插入

    //UPDATE
    //批量更改内容UPDATE 表名  ->  SET 条目名 = 具体更改数据内容
    //过滤更新 WHERE 条目名 = 'XXX' 给要更改的条目进行判断
    //注意 数据库中不区分"="或"=="
    //WHERE子句
    //在数据库中 <>表示!= 有些数据库也支持!=符号
    //如果无WHERE 则表示数据全修改


    //DELETE


    //数据类型 (数字 字符 日期 布尔 二进制)

    //1 数字类型 NUMBER
    //整数类型 INT 四字节 正负21亿
    //无符号INT UNSIGNED 只存储正数
    //BIGINT --- long
    //DOUBLE类型: FLOAT(m,n) DOUBLE(m,n)
    //m:一共几位
    //n:有几位小数(m是包含n的)


    //定长字符串 CHAR类型
    //存储0-255字符 默认为1字符
    //若存储的字符串长度小于指定长度 会自动在末尾填充空格字符
    //优点 查的快 缺点 浪费空间
    //TEXT 定长字符串类型 最高可存64Kb字符数据
    //MEDIUMTEXT 16MB
    //LONGTEXT 4GB

    //VARCHAR变长字符串 最大值为65535
    //VARCHAR(m) m表示字符长度 表示最长为m个字符
    //缺点 查得慢 优点 节省空间

    //适用场景
    //长度基本固定 选用CHAR类型 查得快
    //长度不固定 使用VARCHAR类型 不浪费空间


    //日期类型
    //DATE 年月日
    //TIME 时分秒
    //DATETIME 年月日 时分秒 'YYYY-MM-DD hh:mm:ss'
    //TIMESTAMP 时间戳

    //约束条件
    //约束 限制数据库表中数据的一组规则或条件 使得数据符合预期的规范
    //主键约束 非空约束 唯一性约束 检查约束 外键约束
    //主键约束 PRIMARY KEY
    //主键字段的值用来唯一表示该表中的一条记录 与数据无关 只是用来标号排序
    //非空且唯一
    //主键约束在一个表中只能有一个
    //自增主键: AUTO_INCREMENT 相当于默认值为自增模式 别的字段也可以自增 但是用的少

    //非空约束 NOT NULL
    //一个表中可以有无数个非空约束

    //唯一性约束 UNIQUE
    //字段的值 除了NULL之外都不允许重复

    //检查约束 CHECK
    //例如 CHECK(age>0 AND age<120) 无法在查看表结构时被查看到

    //外键约束
    //开发中不常用

    //DQL语句
    //用于查询 检索表中记录的语言
    //SELECT 选择---SELECT * FROM 表名1,表名2... 查询所有内容 但是尽量避免使用完全查询
    //原因 库首先要查询表中所有字段的字段名信息 之后才可以进行查询工作 因此 若频繁查询会降低查询效率

    //WHERE中多个过滤条件 可以使用逻辑运算
    //AND 都为真才为真
    //OR 都为假时才为假

    //IN ()内是OR的关系
    //NOT IN 相反 ()内是AND的关系

    //(NOT) BETWEEN n AND m (最小值n 最大值m)

    //DISTINCT 去重
    //去重指定字段 或去重多个字段的组合都可以
    //🐖注意 DISTINCT关键字必须跟在SELECT🐕关键字后面


    //-----------------------------NEW DAY--------------------------------------//
    //模糊查询
    //比较操作符LIKE(像)来做模糊查询
    //LIKE要借助两个通配符:
        //1 % 任意字符
        //2 _ 一个字符
    //例如 LIKE %X%/X%Y/X_Y%...

    //NULL值判断
    //不能算作一个值 而是一个状态 表示空/不存在
    //数据库中 所有数据默认值都是NULL
    //IS NULL   IS NOT NULL

    //排序 ORDER BY语句 在WHERE后面 倒数第二(LIMIT在最后)或没有LIMIT时在最后
    //按照指定字段排序 默认升序排序
    //注意 数据库之间对于NULL的处理不一样 有的当作最小值 有的当作最大值 可以通过NULL函数更改设定

    //排序日期按照近大远小原则 过去小 未来大

    //多字段排序 字段之间用","隔开
    //优先级: 先看第一个字段 完全按照第一个字段排序 第一个字段出现重复值 才会看后续字段 第一个字段没有重复值 后续的字段是没有作用的

    //LIMIT 分页查询是方言 在SQL92标准中没有涉及到分页的语法定义 不同数据库不一样
    //分页查询 将大量查询结果拆分成多个页面的技术
    //常见参数 1 页数 2 每页显示多少条记录

    //函数和表达式(类似方法)
    //IFNULL()函数/NULLIF()函数
    //IFNULL(arg1,arg2) arg1为空 返回arg2 arg1不为空 返回arg1

    //注意 在数据库中 任何数据和NULL计算 都会得NULL

    //别名 增加可读性 字段 表等都能加别名
    //语法 字段 [AS] 别名 当别名不加""或''时 别名不能有空格👉
    //    字段 [AS] '别名'
    //    字段 [AS] "别名"

    //别名是可以当作别名的 但是并非所有数据库都支持不加引号的中文别名 因此尽量在取中文别名时加引号

    //别名是关键字时 必须加引号

    //聚合函数
    //多行函数 分组函数
    //是指将多条记录指定的字段进行'统计'并得到一个结果的函数
    //分类 1 对值的统计
    //2 对记录数的统计 COUNT

    //忽略NULL 也就是说NULL字段不参与统计 AVG和COUNT尤为明显

    //分组 整个结果集分组 在组内再统计
    // GROUP BY
    //按照指定字段值相同的记录分组
    //注意 不在聚合函数的字段必须出现在GROUP BY中 否则会报错
    //GROUP BY中的字段不强制添加到SELECT后 但是建议列出

    //分组一般是和聚合函数配套出现的

    //WHERE和HAVING
    /*
    过滤时机不同
        WHERE 检索表中记录时过滤
        HAVING 产生查询结果集并根据GROUP BY确定分组后过滤
     */
    /*
    功能不同
        WHERE
        HAVING
     */












}
